<?php

namespace Admin\Model;
// use Think\Model\RelationModel;
//福锋玻璃-企业微信-方法调用
use Think\Model;
class WechatModel extends Model
{
    public $CorpID='';
    public $Secret='';
    //构造函数、获取access-token
    public function __construct($type)
    {
      $this->CorpID = 'ww485eb199bfe71938';
      // 企业微信不同应用、Secret不同
      if ($type=="card")
      {
        //打卡权限
        $this->Secret = 'GfBDX1gZANB6_Ad5bqt71FRpNOUdOl2KSxp4suvF9iM';    
      }elseif ($type=="main")
      {
        //通讯录权限、部门成员
        $this->Secret = 'HKR7xpTwxkTyFxbjAH9ewOB4yjBTyvyr3ZdIL57uNqw';
      }elseif ($type=="audit") 
      {
        //审批权限、请假、申请等
        $this->Secret = 'lly69384OL-c3oLwzxaZSJDOHpMWCtnNW_-OlyeYARQ';
      }elseif ($type=="pay") 
      {
        //企业支付、红包、收款
        $this->Secret = "E25tknn5mZ7hgVqJMebAVApxGUqn9B_n4bRCDU4M1jk";
      }
      $this->getaccess($type);
    }
  /**
  * @param [string]  $url    [API接口链接]
  * @param [boolean] $https  [API访问地址为https为true,反之为false]
  * @param [string]  $method [API传递数据请求方式(POST,GET)]
  * @param [json]    $date   [POST传输的数据]
  **/
    private function getcurl($url,$https = true,$method = 'get' ,$date = null)
    {
      $ch = curl_init();  //创建curl资源
      curl_setopt($ch, CURLOPT_URL,$url);//这是url的地址
      curl_setopt($ch,CURLOPT_HEADER,false);//设置不需要头信息
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//不直接输出
      if($https)
      {
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//不做服务器认证
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//不做客户端认证
      }
      if($method == 'post')
      {
        curl_setopt($ch,CURLOPT_POST,true);//设置请求方式为POST
        curl_setopt($ch,CURLOPT_POSTFIELDS,$date);//设置POST请求的数据
      }
      $result = curl_exec($ch);
      curl_close($ch);
      return  $result;
    }
    //aaHVtLG19sV5BCORhO8nVqIRMT482WPEahpvBUxhfAo
    public function getaccess($type)
    {
        $url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='.$this->CorpID.'&corpsecret='.$this->Secret;
        //使用应用 调取access_app的access_token
        if ($type=="card")
        {
          $file = $_SERVER['DOCUMENT_ROOT']."/Public/access_token/address_card.txt";   
        }elseif($type=="main")
        {
          $file = $_SERVER['DOCUMENT_ROOT']."/Public/access_token/address_list.txt";
        }elseif($type=="audit")
        {
          $file = $_SERVER['DOCUMENT_ROOT']."/Public/access_token/address_audit.txt";
        }elseif($type=="pay")
        {
          $file = $_SERVER['DOCUMENT_ROOT']."/Public/access_token/address_pay.txt";
        }
        if(file_exists($file)){
            $content = file_get_contents($file) ; //获取file文件的内容
            $content = json_decode($content) ; // 翻译JSON格式
            if(time()-filemtime($file) < $content->expires_in) {//如果当前时间减去文件修改时间小于过期时间 （证明access_token没有过期）
                return $content->access_token ;
            }else{
                $content = $this->getcurl($url);
                file_put_contents($file, $content) ;  //写入file文件 内容为 content
                $content = json_decode($content) ; // 翻译JSON 格式
                return $content->access_token;
            }
        }else{
            $content = $this->getcurl($url);
            file_put_contents($file, $content) ;  //写入file文件 内容为 content
            $content = json_decode($content) ; // 翻译JSON 格式
            return $content->access_token;
        }
    } 
    /**
    * 用户,部门=>新增修改删除
    * 发送信息 
    * @param [array|int]  $data   [操作数据]
    * @param [string]     $type   [新增为create,修改为update,删除为delete|发送为send]
    * @param [string]     $module [部门为department,成员为user|信息为message]
    **/
    public function makewx($data,$type,$module)
    {
        //删除操作
        if($type == 'delete'){
            $url = 'https://qyapi.weixin.qq.com/cgi-bin/'.$module.'/'.$type.'?access_token='.$this->getaccess().'&id='.$data;
            echo $this->getcurl($url); 
        }else{
            // 传递的数据转化为json格式， 中文不解析
            $data = json_encode($data,JSON_UNESCAPED_UNICODE);
            $url = 'https://qyapi.weixin.qq.com/cgi-bin/'.$module.'/'.$type.'?access_token='.$this->getaccess();
            echo $this->getcurl($url,true,'post',$data);
        }
    }
    /**
    * 获取微信传输详细信息(get)
    * @param  [string] $code [微信端传输的信息代号]
    * @return [array]        [解析获取详细信息]
    */
    // public function getuser($code)
    // {
    //   $url = 'https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token='.$this->getaccess().'&code='.$code;
    //   $data = $this->getcurl($url);
    //   return json_decode($data,true);
    // }
    //获取打卡规则
    public function getcard_rule($datetime,$useridlist)
    {
        // 参数         必须   说明
        // access_token  是    调用接口凭证。必须使用打卡应用的Secret获取access_token
        // datetime      是    需要获取规则的日期当天0点的Unix时间戳
        // useridlist    是    需要获取打卡规则的用户列表
        $senddata = [
        "datetime"=> $datetime,
        "useridlist"=>$useridlist,
        ];
        // 传递的数据转化为json格式， 中文不解析
        $senddata = json_encode($senddata,JSON_UNESCAPED_UNICODE);
        $url = 'https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckinoption?access_token='.$this->getaccess();
        $data2=$this->getcurl($url,true,'post',$senddata);
        return json_decode($data2,true);
    }
    //获取打卡数据
    public function getcard($useridlist,$starttime,$endtime,$opencheckindatatype=1)
    {
        //   参数             必须  说明
        // access_token        是   调用接口凭证。必须使用打卡应用的Secret获取access_token
        // opencheckindatatype 是   打卡类型。1：上下班打卡；2：外出打卡；3：全部打卡
        // starttime           是   获取打卡记录的开始时间。Unix时间戳
        // endtime             是   获取打卡记录的结束时间。Unix时间戳
        // useridlist          是   需要获取打卡记录的用户列表

        $senddata = [
            "opencheckindatatype"=> $opencheckindatatype,
            "starttime"=>$starttime,
            "endtime"=>$endtime,
            "useridlist"=>$useridlist,
            ];
        // 传递的数据转化为json格式， 中文不解析
        $senddata = json_encode($senddata,JSON_UNESCAPED_UNICODE);
        $url = 'https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token='.$this->getaccess();
        $data2=$this->getcurl($url,true,'post',$senddata);
        return json_decode($data2,true);
    }
    //获取部门人员
    public function getuser($department=1,$fetch_child=1)
    {
        //       参数   必须  说明
        // access_token  是   调用接口凭证
        // department_id 是   获取的部门id
        // fetch_child   否   1/0：是否递归获取子部门下面的成员

        $url='https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token='.$this->getaccess().'&department_id='.$department.'&fetch_child='.$fetch_child;
        $data=$this->getcurl($url,true,'get');
        return json_decode($data,true);
    }
     //获取部门人员-详情
    public function getuser_detail($department=1,$fetch_child=1)
    {
        $url='https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token='.$this->getaccess().'&department_id=1&fetch_child=1';
        $data=$this->getcurl($url,true,'get');
        return json_decode($data,true);
    }
    public function get_aduit($starttime,$endtime)
    {
        // 参数         必须   说明
        // access_token  是    调用接口凭证。必须使用审批应用的Secret获取access_token
        // starttime     是    获取审批记录的开始时间。Unix时间戳
        // endtime       是    获取审批记录的结束时间。Unix时间戳
        // next_spnum    否    第一个拉取的审批单号，不填从该时间段的第一个审批单拉取
        $senddata = [
            "starttime" => $starttime,
            "endtime" => $endtime,
            // "useridlist" => $useridlist,
            ];
        // 传递的数据转化为json格式， 中文不解析
        $senddata = json_encode($senddata,JSON_UNESCAPED_UNICODE);
        $url = 'https://qyapi.weixin.qq.com/cgi-bin/corp/getapprovaldata?access_token='.$this->getaccess();
        $data2=$this->getcurl($url,true,'post',$senddata);
        return json_decode($data2,true);
    }


}